var campo;
var idC;
var defectoC;
var usuarioC;
var passC;
var servidCorC;
var puertoC;
var bdC;
var tablaC;
var columna;
var fila;
var accion;
var peticion;
var elementosPag = 10;
var numPagina = 1;
var numElementosTable = null;
var retrocede = false;
/*METODO QUE SE INICIA AL CARGAR EL BODY*/
function init(user,pass,servidor,puerto,bd,tabla){
	this.usuarioC = user;
	this.passC = pass;
	this.servidCorC = servidor;
	this.puertoC = puerto;
	this.bdC = bd;
	this.tablaC = tabla;
	cargarTablas(usuarioC,passC,servidCorC,puertoC,bdC);
	selectCount();
	cargarContenidoTablas();
	document.getElementById('pagAnterior').disabled = true;
	//alert("cuando meto una letra en un campo numerico dice ok");
}

/*INICIALIZACION PARA AJAX*/
function inicializa_xhrUpdate() {
	
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
}
/*---------------------------------------------------------------------------------------------------------------------------*/
/*CARGAR CONTENIDO DE LA TABLA*/
/*============================*/
//Metodo que se ejecuta al cargar la pagina o al hacer alguna modificacion en la base de datos
function cargarContenidoTablas() {
	cargarContenidos = inicializa_xhrUpdate();
	if (cargarContenidos) {
		cargarContenidos.onreadystatechange = cargalos;
		cargarContenidos.open("POST", path + "/mostrarContenidoTablas", true);
		cargarContenidos.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		cargarContenidos.send("bd=" + bdC + "&usuario=" + usuarioC + "&pass=" + passC + "&servidor=" + servidCorC + "&puerto=" + puertoC + "&tabla=" + tablaC + "&elementos=" + elementosPag + "&pag=" + numPagina);
	}
}
//Metodo que pinta la tabla con el contenido de la base de datos
function cargalos() {
	if (cargarContenidos.readyState == 4) {
		if (cargarContenidos.status == 200) {
			document.getElementById('contenidoDeLasTablas').innerHTML = cargarContenidos.responseText;
		}
	}
}

/*===========FIN==============*/
/*CARGAR CONTENIDO DE LA TABLA*/
/*---------------------------------------------------------------------------------------------------------------------------*/
/*INSERTAR UNA NUEVA FILA*/
/*=======================*/
//Metodo que se ejecuta cuando se hace click en el boton insertar
function insertarFila(){
	var contador = 1;
	var documento;
	var consulta = "";
	while((documento = document.getElementById('insert' + contador)) != null){
		if(documento.value == null){
			value = "";
		}
		consulta = consulta + "&"+documento.id + "=" + documento.value;
		contador++;
	}
	insertarNuevaFila = inicializa_xhrUpdate();
	if (insertarNuevaFila) {
		insertarNuevaFila.onreadystatechange = insertalas;
		insertarNuevaFila.open("POST", path + "/insert", true);
		insertarNuevaFila.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		insertarNuevaFila.send("bd=" + bdC + "&user=" + usuarioC + "&pass=" + passC + "&host=" + servidCorC + "&port=" + puertoC + "&tabla="+tablaC + consulta);
	}
}
//Metodo que se ejecuta cuando el servicio a terminado
function insertalas(){
	if (insertarNuevaFila.readyState == 4) {
		if (insertarNuevaFila.status == 200) {
			if(insertarNuevaFila.responseText == "null"){
				cargarContenidoTablas();
				pintarOk('<div class="aviso"><div class="pro_aviso ok"><p>Insercción correcta</p></div></div>');
				selectCount();
			}
			else{
				var jsonObj = JSON.parse(insertarNuevaFila.responseText);
				pintarError(jsonObj.error, jsonObj.descripcion);
			}
		}
	}
}

/*==========FIN==========*/
/*INSERTAR UNA NUEVA FILA*/
/*---------------------------------------------------------------------------------------------------------------------------*/
/*EDITAR UN CAMPO*/
/*===============*/
//Metodo que se ejecuta cuando se hace doble click en un campo para editarlo
function dobleClick(columna,fila){
	
	this.accion = "false";
	campo = document.getElementById(columna + ',' + fila);
	idC = campo.getAttribute('id');
	defectoC = document.getElementById(idC).parentNode.innerHTML + '';
	campo.parentNode.innerHTML = "<textarea style='position:absolute;margin-left: -40px;' class='campo' onBlur='cargarContenidoTablas();' id='"+idC+"' onKeyPress='return teclaPulsada(event);' name='" +columna + ','  + fila + "' >" + campo.innerHTML + "</textarea>";
	document.getElementById(columna + ',' + fila).focus();
	this.columna = columna;
	this.fila = fila;
	
}
//Metodo que llama al servicio para modificar el campo
function editartabla(valor) {
	peticion = inicializa_xhrUpdate();
	if (peticion) {
		peticion.onreadystatechange = editarElCampo;
		peticion.open("POST", path + "/editarCampo", true);
		peticion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		peticion.send("bd=" + bdC + "&usuario=" + usuarioC + "&pass=" + passC + "&servidor=" + servidCorC + "&puerto=" + puertoC + "&valor=" + valor + "&tabla="+tablaC + "&fila="+fila + "&columna="+columna + "&accion="+accion);
	}
}
//Metodo que escucha el teclado para hacer la modificacion al pulsar intro o descartar cambios al pulsar escape
function teclaPulsada(e){
	var tcl = (document.all)?e.keyCode:e.which;
	if (tcl == 27){
		cargarContenidoTablas();
		return false;
	} else if(tcl == 13){
		aceptar();
		return false;
	} else{
		return true;
	}
}
//Metodo que se ejecuta cuando se ha aceptado la accion(editar campo o eliminar fila)
function aceptar(){
	if(accion == "false"){
		editartabla(document.getElementById(idC).value);
	}else{
		editartabla("");
	}
}
//Metodo que se ejecuta cuando el servicio a terminado, con error o sin el
function editarElCampo() {
	if (peticion.readyState == 4) {
		if (peticion.status == 200) {
			if(accion == "false"){
				var jsonObj = JSON.parse(peticion.responseText);
				if(jsonObj.error == "null" && typeof jsonObj.cambios !== "undefined"){
					pintarOk('<div class="aviso"><div class="pro_aviso ok"><p>' + jsonObj.cambios + '</div></div>');
					cargarContenidoTablas();
				}else{
					pintarError(jsonObj.error, jsonObj.descripcion);
				}
			}else{
				var jsonObj = JSON.parse(peticion.responseText);
				if(jsonObj.error == "null"){
					pintarOk('<div class="aviso"><div class="pro_aviso ok"><p>Eliminación efectuada con exito</p></div></div>');
					selectCount();
					retrocede = true;
				}else{
					pintarError(jsonObj.error,jsonObj.descripcion);
				}
			}
			jsonObj = null;
		}
	}
}

/*======FIN======*/
/*EDITAR UN CAMPO*/
/*---------------------------------------------------------------------------------------------------------------------------*/
/*ELIMINAR UN CAMPO*/
/*===============*/
//Metodo que se ejecuta cuando se quiere eliminar una fila
//Cuando se elimina se usan los mismos metodos que en editar
//solo que la accion es = true
function eliminar(fila){
	
	this.accion = "true";
	this.fila = fila;
	this.columna = 0;
	aceptar();
}
/*======FIN======*/
/*ELIMINAR UN CAMPO*/
/*---------------------------------------------------------------------------------------------------------------------------*/
//Metodo que pinta OK
function pintarOk(valorOk){
	var div = document.getElementById('error');
	if(document.getElementById('ko') != null){
		div = document.getElementById('ko');
	}else if(document.getElementById('ok') != null){
		document.getElementById('ok').innerHTML = "";
	}
	
	div.innerHTML = valorOk;
}
/*---------------------------------------------------------------------------------------------------------------------------*/
//Metodo que pinta los errores
function pintarError(valorError ,valorDescripcion){
	var div = document.getElementById('error');
	if(document.getElementById('ko') != null){
		document.getElementById('ko').innerHTML = "";
	}else if(document.getElementById('ok') != null){
		div = document.getElementById('ok');
	}
	if(valorDescripcion != null){
		div.innerHTML = '<div class="aviso"><div class="pro_aviso ko"><p>' + valorError + '<a id="especial" data-toggle="modal" href="#windowTitleDialog" onclick="cargarDatosMsj(\'6\', \''+valorDescripcion+'\', \'\');" style="font-size:\'10px\'; "> (más)</a></p></div></div>';
	}else{
		div.innerHTML = '<div class="aviso"><div class="pro_aviso ko"><p>' + valorError + '</p></div></div>';
	}
}
/*---------------------------------------------------------------------------------------------------------------------------*/
/*PAGIDOR*/
/*=======*/
function cambioElementos(num){
	elementosPag = num;
	numPagina = 1;
	ponBotones();
	cargarContenidoTablas();
	document.getElementById('pag').value = numPagina;
}

function anterior(){
	numPagina--;
	ponCargando();
	ponBotones();
	cargarContenidoTablas();
}

function siguiente(){
	numPagina++;
	ponCargando();
	ponBotones();
	cargarContenidoTablas();
}

function prin(){
	numPagina = 1;
	ponCargando();
	ponBotones();
	cargarContenidoTablas();
}

function fin(){
	numPagina = parseInt(numElementosTable / elementosPag);
	if(numPagina < numElementosTable / elementosPag){
		numPagina++;
	}
	ponCargando();
	ponBotones();
	cargarContenidoTablas();
}
//Count

function selectCount(){
	count = inicializa_xhrUpdate();
	if (count) {
		count.onreadystatechange = dameCount;
		count.open("POST", path + "/selectCount", true);
		count.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		count.send("bd=" + bdC + "&usuario=" + usuarioC + "&pass=" + passC + "&servidor=" + servidCorC + "&puerto=" + puertoC + "&tabla=" + tablaC );
	}
}
//Metodo que cuenta las filas de una tabla
function dameCount(){
	if (count.readyState == 4) {
		if (count.status == 200) {
			if(count.responseText != "null"){
				numElementosTable = count.responseText;
				ponBotones();
			}
			else{
			
			}
			if(retrocede){
				retroceder();
				retrocede = false;
			}
		}
	}
}

function ponBotones(){
	if(numPagina > 1){
		document.getElementById('pagAnterior').disabled = false;
		document.getElementById('principio').disabled = false;
		
		document.getElementById('pagAnterior').setAttribute('class','boton');
		document.getElementById('principio').setAttribute('class','boton');
	}
	else{
		document.getElementById('pagAnterior').disabled = true;
		document.getElementById('principio').disabled = true;
		
		document.getElementById('pagAnterior').setAttribute('class','disa');
		document.getElementById('principio').setAttribute('class','disa');
	}
	if(numPagina * elementosPag >= numElementosTable){
		document.getElementById('pagSiguiente').setAttribute('class','disa');
		document.getElementById('fin').setAttribute('class','disa');
		
		document.getElementById('pagSiguiente').disabled = true;
		document.getElementById('fin').disabled = true;
	}else{
		document.getElementById('pagSiguiente').disabled = false;
		document.getElementById('fin').disabled = false;
		
		document.getElementById('pagSiguiente').setAttribute('class','boton');
		document.getElementById('fin').setAttribute('class','boton');
	}
	document.getElementById('pag').value = numPagina;
}

function retroceder(){
	if((numPagina > 1) && (elementosPag * (numPagina - 1) >= numElementosTable)){
		anterior();
	}else{
		cargarContenidoTablas();
	}
}

function ponCargando(){
	document.getElementById('lista-tablas').innerHTML = '<img height="135px" width="135px" alt="Cargando..." src="' + path + '/images/loading.gif"/>';
}

function cambioDePagina(e){
	var tcl = (document.all)?e.keyCode:e.which;
	var p = parseInt(numElementosTable / elementosPag);
	if(p < numElementosTable / elementosPag){
		p++;
	}
	if(tcl == 13){
		if(document.getElementById('pag').value > p){
			document.getElementById('pag').value = p;
		}
		numPagina = document.getElementById('pag').value;
		ponCargando();
		ponBotones();
		cargarContenidoTablas();
		return false;
	} else{
		if(soloNumeros(tcl)){
			if((parseInt(document.getElementById('pag').value + (tcl - 48)) > parseInt(p))){
				return false;
			}else{
				return true;
			}
		}else{
			return false;
		}
	}
}

function soloNumeros(key){
	if(key > 47 && key < 58){
		return true;
	}else{
		return false;
	}
}
/*==FIN==*/
/*PAGIDOR*/
/*RECOGER TECLAS PARA INSERTAR NUEVA FILA*/
/*=======================================*/
function insertarPorIntro(e){
	var tcl = (document.all)?e.keyCode:e.which;
	if(tcl == 13){
		insertarFila();
		return false;
	}else{
		return true;
	}
}
/*=================FIN===================*/
/*RECOGER TECLAS PARA INSERTAR NUEVA FILA*/
